import Mock from 'mockjs'

export function MockPost(url = '', data = null) {
  console.log('=====Mock data=====')
  console.log(`request ${url} \n and params is`, data);
  // 概率性的请求失败的出现
  let returnCode = Mock.Random.integer(0, 9) === 0 ? 201 : 200;
  let msg = returnCode === 200 ? '保存成功' : '保存失败';
  let returndata = url2fun(url, data) || null;
  let mockData = new Object();
  mockData.code = returnCode;
  mockData.msg = msg;
  mockData.data = returnCode === 200 ? (returndata && returndata.data) : [];

  returnCode === 200 ? console.info(`the return code is ${returnCode}, and mock data is`, mockData) :
    console.warn(`the return code is ${returnCode}, and mock data is`, mockData)
  console.log('=====Mock data end=====')

  return mockData;
}

/**
 * url转化为函数
 */
function url2fun(url, data) {
  // 默认会返回一些数据，如果需要就要自己定义一些函数，例如 底下的sms
  let funData = Mock.mock({
    "data|1-10": [{
      id: data.id || Mock.Random.integer(1, 10000),
      name: data.name || Mock.Random.ctitle(),
      image: Mock.Random.image('200x100', '#FF6600'),
      sex: Mock.Random.integer(0, 1),
    }]
  });
  for (let i in urls) {
    if (urls[i] == url) funData = eval(i)(data);
  }
  return funData;
}
/*url对应函数的名字*/
const urls = {
  sms: '/sms/sendCode',
  login: '/member/signin',
  loginOut: '/member/loginout',
  indexBanner: '/index/getBanner',
  indexMenus: '/index/getMenus',
  /* 产品模块 */
  indexProdList: '/product/list',
  getProdTabs: '/product/tabs',
  getFiltrate: '/product/getFiltrate',
  getProdDetail: '/product/getDetail',
  getCategory: '/api/order/booking/info',
  /*消息*/
  messageList: '/message/index',
  msgDetail: '/message/detail',
  getBulletins: '/message/getBulletins',

  /* 订单 */
  getOrderList: '/v1/order/list',
  getOrderDetail: '/v1/order/detail',
  getOrderProgress: '/v1/order/progress',
  /* 订单-核销 */
  getOrderVoucher: '/v1/order/voucher',
  getVoucherSingleDetail: '/v1/order/voucher_single',
  getVoucherRecord: '/v1/voucher/record',
  /* 订单-退款 */
  getRefundfee: '/v1/refund/fee',
  submitRefund: '/v1/refund/submit',
  cancelRefund: '/v1/refund/cancel',
  getRefundList: '/v1/refund/list',
  getRefundDetail: '/v1/refund/detail',
  /* 提现记录 */
  getWidthdrawList: '/v1/withdraw/list',
  
  /* pc 基础配置--pc获取侧边菜单 */
  getSideMenus: '/v1/config/base',
  getPCProdList: '/api/product/list',
}
// 自己定义的函数名字
let sms = (data) => {
  return null;
}
let login = (data) => {
  const phone = Mock.mock({
    'phone': /(0\d{2,3}\d{7,8})|(1\d{10})/
  })
  return Mock.mock({
    mobile: data.mobile,
    distributor_id: Mock.Random.integer(1, 9999),
    uid: Mock.Random.integer(1, 9999),
    contact_name: Mock.Random.cname(),
    nickname: Mock.Random.cname(),
    customer_name: Mock.Random.cname(),
    customer_phone: phone.phone,
    shop_name: Mock.Random.ctitle(3, 6),
    is_agent: Mock.Random.boolean(),
    grade: Mock.Random.boolean(),
    user_type: data.role === 1 ? 'visitor' : data.role === 2 ? 'distributor' : 'supplier',
  })
}
let loginOut = (data) => {
  return null;
}

let indexBanner = (data) => {
  return Mock.mock({
    "data|1-10": [{
      title: Mock.Random.ctitle(),
      link: Mock.Random.url(),
      image: Mock.Random.dataImage('750x140', '测试的首页数据')
    }]
  })
}
let indexMenus = (data) => {
  return Mock.mock({
    "data|1-16": [{
      title: Mock.Random.ctitle(),
      link: Mock.Random.url(),
      image: Mock.Random.dataImage('33x33', '按钮')
    }]
  })
}
/* 产品 */
let indexProdList = (data) => {
  return Mock.mock({
    "data|1-16": [{
      id: Mock.Random.integer(1, 9999),
      kind_name: Mock.Random.cname(),
      name: Mock.Random.cname(),
      zone_name: Mock.Random.city(),
      sales: /\d{1,4}/,
      sale_price: /\d{1,4}.\d{2}/,
      cost_price: /\d{1,4}.\d{2}/,
      img: Mock.Random.image()
    }]
  })
}

const getProdTabs = data => {
  return Mock.mock({
    'data|1-8': [{
      text: Mock.Random.ctitle(2, 6),
      value: /\d{1,6}/
    }]
  })
}

const getFiltrate = data => {
  return Mock.mock({
    'data|2': [{
      title: Mock.Random.ctitle(2, 6),
      'type|1': ['area', 'sort'],
      'list|4-10': [{
        text: Mock.Random.ctitle(4),
        value: /\d{1,6}/
      }]
    }]
  })
}

const getProdDetail = data => {
  return Mock.mock({
    'data': {
      id: data.id,
      name: Mock.Random.ctitle(),
      'packages|1-3': [{
        id: 12,
        name: Mock.Random.ctitle(),
        latest_price: {
          origin_price: /\d{2,3}/,
          sale_price: /\d{2,3}/,
          cost_price: /\d{2,3}/,
        },
        sales: /\d{1,4}/,
      }],
      'tags|1-5': [Mock.Random.cname()],
      zone_name: Mock.Random.city(),
      address: Mock.Random.county(true),
      extra: {
        lat: /\d{2,3}.\d{5,8}/,
        lng: /\d{2,3}.\d{5,8}/,
      },
      interested: /\d{2,4}/,
      'banner|1-5': [{
        href: Mock.Random.url(),
        image: Mock.Random.image()
      }],
      detail: {
        content: Mock.Random.cparagraph(5, 9),
        'instruction|1-2': [{
          'name|1': ['签收8天内退货', '7天无理由退货', '指定日期内退货'],
          content: Mock.Random.cparagraph()
        }],
        'instruction_kind|1': [0, 1],
        picture: {
          post: [],
          product_pic: [],
        }
      },
      notic: {
        free: Mock.Random.boolean(),
        content: Mock.Random.cparagraph(5),
        'rule|1-3': [{
          title: Mock.Random.ctitle(),
          content: Mock.Random.cparagraph(5, 9),
          'rule|1-2': [{
            'tag|1': ['签收8天内退货', '7天无理由退货', '指定日期内退货'],
            content: Mock.Random.cparagraph()
          }],
        }]
      }
    }
  })
}

const getCategory = data => {
  return Mock.mock({
    data: {
      'booking_info|1-3': [{
        'is_show|1': [0, 1],
        'title|1': ['预订说明', '使用说明', '退改说明'],
        desc: Mock.Random.cparagraph(),
        'children|1-5': [{
          'is_show|1': [0, 1],
          title: Mock.Random.ctitle(),
          desc: Mock.Random.cparagraph()
        }]
      }]
    }
  })
}

/* 订单 */
const STATUS_LIST = [{
  key: 0,
  name: '待支付'
}, {
  key: 1,
  name: '超时关闭'
}, {
  key: 2,
  name: '用户关闭'
}, {
  key: 3,
  name: '系统关闭'
}, {
  key: 4,
  name: '已支付'
}, {
  key: 5,
  name: '待确认'
}, {
  key: 6,
  name: '待完成'
}, {
  key: 7,
  name: '交易完成'
}]
const getOrderList = (data) => {
  return Mock.mock({
    'msg': '操作成功',
    'code': 200,
    'data': {
      "page": 1,
      "page_size": 10,
      "query_str": "",
      'total_rows': 21,
      'order_list|5': [{
        "id": 3,
        'order_no': /S\d{12,16}/, // 订单号
        'order_state': STATUS_LIST[Mock.Random.integer(0, STATUS_LIST.length - 1)].key, // 订单状态
        'state_name': STATUS_LIST[Mock.Random.integer(0, STATUS_LIST.length - 1)].name, // 订单状态
        'avail_date_desc': '9月10日至9月12日 2晚', // 出游日期 avail_date+check_out_date
        "reserve_date": "11-10", // 预订日期 mm-dd
        "pay_amount|5-1000.0-2": 1, // 订单实际支付总额
        // 'delivery': 0, // 配送方式. 0:无需配送（非实物）; 1:标准配送（实物）; 2:用户自提（实物）
        'product_list|1-2': [{
          'product_id': /PRO\d{5}/, // 产品id
          'product_name': '堰无味—堰上本无味，聊赠好山水，手工制作，美味好礼【state 和 state_name 对不上】', // 产品名称
          'product_kind|1': [1, 2, 3, 4, 5, 6, ], // 产品类型(1:门票 2:特产(实物) 3:酒店 4:餐饮 5:演出 6:线路)
          'qty|1-5': 1, // 下单数量
          // 'invoice_state': 2, // 开具发票状态(0:未开发票 1:已开发票 2:不可开发票)
          // 'comment_state': 2, // 点评状态(0:未点评 1:已点评 2:不可点评)
        }],
      }]
    }
  })
}
const getOrderDetail = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data": {
      "id": /ORDER_\d{3,5}/,
      "order_no": /ORDER_\d{12,16}/, // 订单号
      'state': 0, // 订单状态
      'state_name': STATUS_LIST[Mock.Random.integer(0, STATUS_LIST.length - 1)].name, // 订单状态
      "state_mark": "请凭身份证到景区取票", // 状态备注（如：库存有限，请尽快完成付款）
      "remark": "我是备注",
      "contact_name": "联系人预订人123",
      "contact_phone": "18750257292",
      "pay_amount|5-1000.0-2": 1, // 实际支付金额（订单总额）
      "avail_date_desc": "9月10日至9月12日", // 出游日期 avail_date+check_out_date
      "payment_timeout": "01:29:12", // 剩余支付时间 HH:ii:ss

      "voucher_count": 4, // 子核销码数量
      "voucher": { // 总核销码
        "id": /VC_\d{10,16}/,
        "has_img": 1, // 是否提供二维码图片，0-否，1-是
        "code": /\d{10,16}/, // 核销码
        "state|1": [0, 10, 11, 1],
        "state_name": '部分使用', //核销码状态名称
      },

      "product_list|1-3": [{
        "product_id": /PROD_\d{5,6}/,
        "product_name": "鼓浪屿产品名称鼓浪屿产品名称鼓浪屿产品名称",
        "telephone": "0592-3356572", // 咨询客服电话，产品未配置的则使用站点客服电话
        "item_list|1-3": [{ // 套餐
          "id": /SKU_\d{10,16}/,
          "valid_date_desc": '2019-10-01至2019-10-07有效', // 有效期描述
          "sku_id": /SKU_d111/,
          "sku_name|1": ["日光岩", "成人票", "儿童票", "亲子票", "海底世界"], // 套餐名称
          "qty": 2,
          "sale_price": "150.00", // 销售价格（该套餐的实际支付）
          "traveler|0-15": [{ // 出行人信息列表
            "name": "张三",
            'identity_name': '身份证',
            "identity_kind|1": [1, 2, 3, 4, 5, 6, ], // 证件类别. <0:身份证; 1:护照; 2:台胞证; 3:回乡证; 4:军人证; 5:港澳通行证; 6:户口簿>
            "identity_code": /350\d{11,15}/,
          }],
          "refund_info": { // 退款信息
            "is_can_refund": 1, // 是否可退，0-不可退，1-可退
            "title": "有条件退", // 退改标题（如：有条件退）
            "desc": [ // 退改说明
              "有条件退<br>未使用状态下，在有效期内可申请退款；如需改期，请申请取消后重新预订",
              "退款将收取【1%】手续费",
              "游玩日期前7天0:0之前申请取消，收取【1%】手续费",
              "游玩日期前3天0:0之前申请取消，收取【3%】手续费"
            ]
          }
        }, ]
      }, ]
    }
  })
}
const getOrderProgress = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data": {
      "progress|1-5": [{
        'time': '2019-10-23 19:18',
        'content': '订单已提交123123',
      }]
    }
  })
}

/* 订单-核销 */
const getOrderVoucher = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data": {
      "order_no": /ORDER_\d{12,16}/, // 订单号
      "from_share|1": [0, 1], // 是否分享来源
      'encode_order_no': 'aksdfjskdfujewikrfueirkdk',
      'code': '234343434', // t_order 主核销码
      'state': 0, // 状态代码
      'state_name': '未核销', // 状态文字
      "items|1-3": [{
        "product_name": "鼓浪屿产品名称鼓浪屿产品名称鼓浪屿产品名称",
        "sku_codes|1-3": [{ // 套餐
          "sku_name|1": ["日光岩", "成人票", "儿童票", "亲子票", "海底世界"], // 套餐名称
          'avail_description': '2019-10-01至2019-10-07', // 可用时间描述
          "code": /\d{10,16}/, // 核销码
          'has_traveler': '1', // 是否有出行人
          "state|1": [0, 10, 11, 1],
          "state_name": '部分使用', //核销码状态名称
          'verified_description': '未核销5张', // 核销状态描述
          "child_code|0-5": [{ // 出行人信息列表
            "name": "张三",
            'identity_name': '身份证',
            "identity_code": /350\d{11,15}/,
            'code': '222333322222', // 核销码
            "state|1": [0,10, 11, ], // 核销码状态
            "state_name": '部分使用', //核销码状态名称
          }],
        }, ]
      }, ]
    }
  })
}
const getVoucherSingleDetail = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data": {
      "from_share|1": [0, 1], // 是否分享来源
      "order_no": /ORDER_\d{12,16}/, // 订单号
      "encode_order_no": /encode_ORDER_\d{12,16}/, // 订单号
      "code": /\d{10,16}/, // 核销码
      "encode_code": /encode_\d{10,16}/, // 加密核销码

      "state|1": [0, 10, 11, 1],
      "state_name": '部分使用', //核销码状态名称
      'kind_name': '子核销码', // 核销码类型描述
      'product_name': '都江堰景区门票，应邀而来遇见你！',
      'sku_name': '成人票', // 产品套餐名称
      'avail_description': '2019年10月20日', // 可用时间描述
      'verified_description': '未核销5张', // 核销状态描述
      'has_traveler': 0, // 是否包含出行人
      // 出行人信息
      'traveler': {
        'name': '小明',
        'identity_name': '身份证',
        "identity_code": /350\d{11,15}/,
      }
    }
  })
}
const getVoucherRecord = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data|1-5": [{
      "order_no": /ORDER_\d{12,16}/, // 订单号
      'product_name': '都江堰景区门票，应邀而来遇见你！', // 产品名称
      'sku_name': '成人票', // 产品套餐名称
      'created_at': '2019-10-23 19:18', // 核销时间
      'consume_qty': 2, // 核销数量
      'code': /\d{10,16}/, // 核销码
      'traveler': '任晨、小东',
    }]
  })
}

/* 订单-退款 */
const submitRefund = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data": {
      'id': 'RFD_111', // 退款id
      'order_no': 'B19111117520444', // 订单号
      'qty': 1, // 退款数量
      'fee': '4.20', // 退款手续费单价
      'refund_amount': '135.80', // 实际退款金额
      'state': 0, // 退款状态
      'state_name': '等待商家审核',
      'reason': '不想要了', // 退款理由
      'created_at': "2019-11-21 11:46", // 创建时间
      'product_name': '瞻园夜公园', // 产品名称
      'sku_name': '瞻园夜公园成人票', // 产品SKU名称
    }
  })
}

const getRefundfee = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data": {
      'refund_amount': 19, // 实际可退款金额
      'total_amount': 100, // 销售金额
      'refund_fee': 5, // 退款手续费
      'seller_discount_amount': '4.20', // 商家退款折扣金额
      'platform_discount_amount': '135.80', // 平台退款折扣金额
    }
  })
}

const cancelRefund = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data": {
      'id': 'RFD_111', // 退款id
      'order_no': 'B19111117520444', // 订单号
      'qty': 1, // 退款数量
      'fee': '4.20', // 退款手续费单价
      'refund_amount': '135.80', // 实际退款金额
      'state': 0, // 退款状态
      'state_name': '请等待商家审核', // 退款状态--前台展示值
      'reason': '不想要了', // 退款理由
      'created_at': 1574317015, // 创建时间
      'product_name': '瞻园夜公园', // 产品名称
      'sku_name': '瞻园夜公园成人票', // 产品SKU名称
    }
  })
}

const getRefundList = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data|0-3": [{
      'id': /RFD_\d{2,5}/, // 退款id
      'order_no': 'B19111117520444', // 订单号
      'qty': 1, // 退款数量
      'fee': '4.20', // 退款手续费单价
      'refund_amount': '135.80', // 实际退款金额
      'state|1': [0, 1, 2, 10, 11, 12], // 退款状态
      'state_name': '等待商家审核',
      'reason': '不想要了', // 退款理由
      'created_at': "2019-11-21 11:46", // 创建时间
      'product_name': '瞻园夜公园', // 产品名称
      'sku_name': '瞻园夜公园成人票', // 产品SKU名称
    }]
  })
}

const getRefundDetail = (data) => {
  return Mock.mock({
    "msg": "操作成功",
    "code": 200,
    "data": {
      'id': 'RFD_111', // 退款id
      'order_no': 'B19111117520444', // 订单号
      'qty': 1, // 退款数量
      'fee': '4.20', // 退款手续费单价
      'refund_amount': '135.80', // 实际退款金额
      'state': 0, // 退款状态
      'state_name': '等待商家审核',
      'reason': '不想要了', // 退款理由
      'created_at': "2019-11-21 11:46", // 创建时间
      'product_name': '瞻园夜公园', // 产品名称
      'sku_name': '瞻园夜公园成人票', // 产品SKU名称
    }
  })
}

/* 消息*/
const messageList = (data) => {
  return Mock.mock({
    "data|1-10": [{
      id: /\d{1,4}/,
      'isreaded|1': [true, false],
      state: Mock.Random.ctitle(4, 8),
      title: Mock.Random.ctitle(6, 12),
      desc: Mock.Random.cparagraph(),
      time: Mock.Random.integer(0, 9) > 7 ? Mock.Random.time('HH:mm') : Mock.Random.datetime('yyyy-MM-dd HH:mm'),
      'link|1': ['/message/bulletin.html', '/message/sysDetail.html'],
      'type|1': [1, 2, 3],
      image: Mock.Random.image('60x60', '活动图片'),
    }]
  })
}

const msgDetail = (data) => {
  return Mock.mock({
    "data": {
      id: data.id,
      title: Mock.Random.ctitle(4, 50),
      time: Mock.Random.datetime('yyyy-MM-dd'),
      'type|1': ['展会活动', '系统通知', '解决跨域的办法'],
      content: Mock.Random.cparagraph(5),
    }
  })
}

const getBulletins = data => {
  return Mock.mock({
    'data|1-5': [{
      id: /\d{1,4}/,
      image: Mock.Random.image('500x300', '重要公告'),
      title: Mock.Random.ctitle(40, 180),
      'link|1': [Mock.Random.url(), false]
    }]
  })
}

const getWidthdrawList = data => {
  return Mock.mock({
    data: {
      'list|2-5': [{
        apply_time: /\d{4}\-\d{2}\-\d{2}\s\d{2}\:\d{2}\:\d{2}/,
        review_time: /\d{4}\-\d{2}\-\d{2}\s\d{2}\:\d{2}\:\d{2}/,
        amount: /\d{1,3}\.\d{0,2}/,
        real_name: /[\u4e00-\u9fa5]{2,4}$/,
        bank_kind: /[\u4e00-\u9fa5]{2,4}$/,
        bank_name: /[\u4e00-\u9fa5]{2,4}$/,
        bank_account: /\w{9,13}/,
        status: /[0-2]{1}/
      }]
    }
  })
}

const getSideMenus = data => {
  return Mock.mock({
    'data|7': [{
      url: /\S{4,8}/,
      name: /[\u4e00-\u9fa5]{2,4}$/,
      mark: /\W{4}/, // 唯一标识，用于选中的区分
      'children|0-3': [{
        url: /\S{4,8}/,
        name: /[\u4e00-\u9fa5]{2,4}$/,
        mark: /\W{4}/, // 唯一标识，用于选中的区分
      }] 
    }]
  })
}

const getPCProdList = data => {
  return Mock.mock({
    data: {
      total: /\d{1,2}/,
      'list|1-10': [{
        id: /\d{1,4}/,
        name: Mock.Random.ctitle(15),
        zone_name: Mock.Random.ctitle(6),
        tag: Mock.Random.ctitle(4),
        thumb: Mock.Random.image('200x100'),
        'sub|0-4': [{
          id: /\d{1,4}/,
          name: Mock.Random.ctitle(15),
          sales: /\d{1,4}/,
          sale_price: /\d{1,4}/,
          trade_price: /\d{1,4}/,
          origin_price: /\d{1,4}/,
          notice: ''
        }] 
      }]
    }
  })
}